home *** CD-ROM | disk | FTP | other *** search
/ CD ROM Paradise Collection 4 / CD ROM Paradise Collection 4 1995 Nov.iso / asm / alib11b.zip / CODE1.ZIP / DISKINFO / DTEST.ASM < prev    next >
Assembly Source File  |  1991-06-11  |  6KB  |  128 lines

  1. PAGE 60,132
  2. TITLE DTEST 1.2 - A DISKETTE DRIVE TEST PROGRAM.
  3. ;
  4. ;  Written by:  Richard L. Fink
  5. ;               RainTree Computer Systems
  6. ;               P.O.Box 2339
  7. ;               Mill Valley, CA 94941
  8. ;
  9. ;  Date:        June 11, 1991
  10. ;  Compiler:    MASM 6.0
  11. ;
  12. ;  License:     DTEST.COM and it's assembler source file are hereby
  13. ;               placed in the Public Domain.
  14. ;
  15. ;
  16. ;  DTEST.COM program which is run from the command line or a batch file.
  17. ;  It tests a diskette drive to see whether or not it contains a diskette.
  18. ;  If a diskette is detected, DTEST will determine which of the following
  19. ;  states it is in: unformatted, formatted with no files, formatted with
  20. ;  files.  A unique DOS Errorlevel is returned for each condition.
  21. ;
  22. ;  This is invaluable for preventing the dreaded:
  23. ;                    ABORT, RETRY, IGNORE?
  24. ;  in the operation of a batch file.
  25. ;
  26. ;  DTEST.COM is run by just typing the name DTEST, followed by a drive
  27. ;  letter in upper or lower case:
  28. ;                    DTEST B
  29. ;  If no drive is provided, the default is the A drive.  Note that no
  30. ;  validation is performed on the drive character.  An invalid drive will
  31. ;  return that the drive contains an unformatted diskette.
  32. ;
  33. ;  Returned DOS Errorlevel:
  34. ;        0 - Drive contains a formatted diskette which is EMPTY.
  35. ;        1 - Drive contains a formatted diskette with files or directories.
  36. ;        2 - Drive contains an UNFORMATTED diskette.
  37. ;        3 - Drive does NOT contain a diskette.
  38. ;        4 - Drive is an unknown unit.
  39. ;
  40. ;  -------------------------------------------------------------------------
  41. ;  The idea for DTEST came from a DOS Tip by Dan Gookin in the April 1991
  42. ;  issue of PC Computing Magazine.
  43. ;
  44. PAGE
  45. ;
  46. DTEST_SEG   SEGMENT BYTE PUBLIC
  47.             ASSUME  CS:DTEST_SEG,DS:DTEST_SEG
  48.             ORG     100H
  49. ;
  50. ;
  51. DTEST       PROC    FAR
  52.             MOV     BX,80H             ;GET PTR TO PARM LENGTH IN PSP.
  53.             ADD     BL,[BX]            ;GET PTR TO END OF PARM TAIL.
  54.             MOV     AL,[BX]            ;GET PARM FROM FIELD.
  55. ;
  56.             AND     AL,NOT 20H         ;CONVERT TO UPPER CASE.
  57.             JZ      @F                 ;NO PARM, USE DEFAULT.
  58.             MOV     DRIVENO,AL         ;SAVE IT.
  59. @@:
  60. ;                            ;ABSOLUTE DISK READ.
  61.             MOV     DX,0               ;LOGICAL SECTOR NO.
  62.             MOV     CX,1               ;NUMBER OF SECTORS TO READ.
  63.             MOV     BX,OFFSET DTA      ;PTR TO DTA.
  64.             MOV     AL,DRIVENO         ;GET DRIVE CAHARACTER.
  65.             SUB     AL,41H             ;CONVERT ASCII DRIVE CHAR TO A DRIVE NUMBER.
  66.             INT     25H                ;ABSOLUTE DISK READ.
  67.             POP     DX                 ;DISCARD FLAGS LEFT ON THE STACK BY INT-25.
  68.             JC      BAD_READ           ;DRIVE DOES NOT CONTAIN A FORMATTED DISKETTE.
  69. ;
  70. ;                            ;DISKETTE IS FORMATTED-  CHECK FOR FILES.
  71.             PUSH    DS                 ;SAVE DATA SEG.
  72.             MOV     AH,2FH             ;GET DTA, ES:BX RETURNED.
  73.             INT     21H                ;DOS FUNCTION CALL.
  74.             PUSH    BX                 ;SAVE OFFSET TO FOX DTA.
  75.             PUSH    ES                 ;SAVE BASE   TO FOX DTA.
  76. ;
  77.             MOV     DX,OFFSET DTA      ;PT TO LOCAL DTA.
  78.             MOV     AH,1AH             ;SET DTA, TO DS:DX.
  79.             INT     21H                ;DOS FUNCTION CALL.
  80. ;
  81.             MOV     DX,OFFSET DRIVENO  ;PT TO DRIVE,PATH,FILENAME STRING.
  82.             MOV     CX,017H            ;ATTRIBUTE.
  83.             MOV     AH,4EH             ;FIND 1ST FILENAME MATCH, @DS:DX.
  84.             INT     21H                ;DOS FUNCTION CALL.
  85. ;
  86. PAGE
  87. ;
  88.             POP     DS                 ;GET BASE   TO FOX DTA.
  89.             POP     DX                 ;GET OFFSET TO FOX DTA.
  90.             PUSHF                      ;SAVE SYSTEM STATUS FROM FILE FIND.
  91.             MOV     AH,1AH             ;SET DTA, TO DS:DX.
  92.             INT     21H                ;DOS FUNCTION CALL.
  93.             POPF                       ;RESTORE SYSTEM STATUS FROM FILE FIND.
  94.             POP     DS                 ;RESTORE DATA SEG.
  95. ;
  96.             MOV     DL,0               ;SETUP BASE RETURN CODE.
  97.             JC      RTNCD_0            ;DISKETTE HAS NO FILES.
  98.             JMP     RTNCD_1            ;DISKETTE HAS FILES.
  99. ;
  100. ;
  101. BAD_READ:                    ;DRIVE CONTAINS NO DISKETTE, OR UNFORMATTED DISKETTE.
  102.             MOV     DL,0               ;SETUP BASE RETURN CODE.
  103.             CMP     AH,1FH             ;READ ERROR-  DRIVE FAILED TO RESPOND ?
  104.             JAE     RTNCD_3            ;YES.
  105.             CMP     AH,8               ;READ ERROR-  BAD CRC ?
  106.             JE      RTNCD_2            ;YES.
  107.             CMP     AX,0201H           ;READ ERROR-  UNKNOWN UNIT ?
  108.             JE      RTNCD_4            ;YES.
  109.             JMP     RTNCD_2            ;OTHER READ ERROR.
  110. ;
  111. ;
  112. RTNCD_4:    INC     DL                 ;RTN CODE 4 - Drive is an unknown unit.
  113. RTNCD_3:    INC     DL                 ;RTN CODE 3 - Drive does NOT contain a diskette.
  114. RTNCD_2:    INC     DL                 ;RTN CODE 2 - Drive contains an UNFORMATTED diskette.
  115. RTNCD_1:    INC     DL                 ;RTN CODE 1 - Drive contains a formatted diskette with files.
  116. RTNCD_0:                               ;RTN CODE 0 - Drive contains a formatted diskette with no files.
  117. ;
  118.             MOV     AL,DL              ;SETUP RETURN CODE.
  119.             MOV     AH,4CH             ;SETUP TERMINATE.
  120.             INT     21H                ;TERMINATE PROGRAM, WITH RETURN CODE.
  121. DTEST       ENDP
  122. ;
  123. DRIVENO     DB      41H,':\*.*',0      ;DRIVE, PATH, FILENAME, ASCIIZ STRING.
  124. DTA         DB      512 DUP(?)         ;DTA-  SIZE = 1 SECTOR.
  125. ;
  126. DTEST_SEG   ENDS
  127.             END     DTEST
  128.